<!DOCTYPE html>
<html>

<head>
	<meta charset="utf-8">
	<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
	<meta name="theme-color" content="#33474d">
	<title>Linux 命令- crontab | 失落的乐章</title>
	<link rel="stylesheet" href="/css/style.css" />
	
      <link rel="alternate" href="/atom.xml" title="失落的乐章" type="application/atom+xml">
    
</head>

<body>

	<header class="header">
		<nav class="header__nav">
			
				<a href="/archives" class="header__link">Archive</a>
			
				<a href="/tags" class="header__link">Tags</a>
			
				<a href="/atom.xml" class="header__link">RSS</a>
			
		</nav>
		<h1 class="header__title"><a href="/">失落的乐章</a></h1>
		<h2 class="header__subtitle">技术面前，永远都是学生。</h2>
	</header>

	<main>
		<article>
	
		<h1>Linux 命令- crontab</h1>
	
	<div class="article__infos">
		<span class="article__date">2017-10-12</span><br />
		
		
			<span class="article__tags">
			  	<a class="article__tag-link" href="/tags/Linux命令/">Linux命令</a>
			</span>
		
	</div>

	

	
		<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;循环运行的例行性计划任务，linux系统则是由 cron (crond) 这个系统服务来控制的。Linux 系统上面原本就有非常多的计划性工作，因此这个系统服务是默认启动的。另外, 由于使用者自己也可以设置计划任务，所以， Linux 系统也提供了使用者控制计划任务的命令 :crontab 命令。</p>
<h2 id="一、crond简介"><a href="#一、crond简介" class="headerlink" title="一、crond简介"></a>一、crond简介</h2><p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;crond是linux下用来周期性的执行某种任务或等待处理某些事件的一个守护进程，与windows下的计划任务类似，当安装完成操作系统后，默认会安装此服务工具，并且会自动启动crond进程，crond进程每分钟会定期检查是否有要执行的任务，如果有要执行的任务，则自动执行该任务。</p>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Linux下的任务调度分为两类，系统任务调度和用户任务调度。</p>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;系统任务调度：系统周期性所要执行的工作，比如写缓存数据到硬盘、日志清理等。在/etc目录下有一个crontab文件，这个就是系统任务调度的配置文件。</p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line">5</div><div class="line">6</div><div class="line">7</div><div class="line">8</div><div class="line">9</div><div class="line">10</div><div class="line">11</div><div class="line">12</div></pre></td><td class="code"><pre><div class="line">/etc/crontab文件包括下面几行：</div><div class="line">[root@localhost ~]<span class="comment"># cat /etc/crontab </span></div><div class="line">SHELL=/bin/bash</div><div class="line">PATH=/sbin:/bin:/usr/sbin:/usr/bin</div><div class="line">MAILTO=<span class="string">""</span>HOME=/</div><div class="line"><span class="comment"># run-parts</span></div><div class="line">51 * * * * root run-parts /etc/cron.hourly</div><div class="line">24 7 * * * root run-parts /etc/cron.daily</div><div class="line">22 4 * * 0 root run-parts /etc/cron.weekly</div><div class="line">42 4 1 * * root run-parts /etc/cron.monthly</div><div class="line">[root@localhost ~]<span class="comment">#</span></div><div class="line">`</div></pre></td></tr></table></figure>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;前四行是用来配置crond任务运行的环境变量，第一行SHELL变量指定了系统要使用哪个shell，这里是bash，第二行PATH变量指定了系统执行命令的路径，第三行MAILTO变量指定了crond的任务执行信息将通过电子邮件发送给root用户，如果MAILTO变量的值为空，则表示不发送任务执行信息给用户，第四行的HOME变量指定了在执行命令或者脚本时使用的主目录。第六至九行表示的含义将在下个小节详细讲述。这里不在多说。<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;用户任务调度：用户定期要执行的工作，比如用户数据备份、定时邮件提醒等。用户可以使用 crontab 工具来定制自己的计划任务。所有用户定义的crontab 文件都被保存在 /var/spool/cron目录中。其文件名与用户名一致。</p>
<h3 id="使用者权限文件："><a href="#使用者权限文件：" class="headerlink" title="使用者权限文件："></a>使用者权限文件：</h3><p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;文件：/etc/cron.deny</p>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;说明：该文件中所列用户不允许使用crontab命令</p>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;文件：/etc/cron.allow</p>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;说明：该文件中所列用户允许使用crontab命令</p>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;文件：/var/spool/cron/</p>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;说明：所有用户crontab文件存放的目录,以用户名命名</p>
<h3 id="crontab文件的含义："><a href="#crontab文件的含义：" class="headerlink" title="crontab文件的含义："></a>crontab文件的含义：</h3><p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;用户所建立的crontab文件中，每一行都代表一项任务，每行的每个字段代表一项设置，它的格式共分为六个字段，前五段是时间设定段，第六段是要执行的命令段，格式如下：</p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><div class="line">1</div></pre></td><td class="code"><pre><div class="line">minute   hour   day   month   week   <span class="built_in">command</span></div></pre></td></tr></table></figure>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;其中：</p>
<ul>
<li>minute： 表示分钟，可以是从0到59之间的任何整数。</li>
<li>hour：表示小时，可以是从0到23之间的任何整数。</li>
<li>day：表示日期，可以是从1到31之间的任何整数。</li>
<li>month：表示月份，可以是从1到12之间的任何整数。</li>
<li>week：表示星期几，可以是从0到7之间的任何整数，这里的0或7代表星期日。</li>
<li>command：要执行的命令，可以是系统命令，也可以是自己编写的脚本文件。</li>
</ul>
<p><figure class="figure"><img src="https://github.com/hcldirgit/image/blob/master/linux%E5%91%BD%E4%BB%A4-crontab/01.png?raw=true" alt=""></figure></p>
<h3 id="在以上各个字段中，还可以使用以下特殊字符："><a href="#在以上各个字段中，还可以使用以下特殊字符：" class="headerlink" title="在以上各个字段中，还可以使用以下特殊字符："></a>在以上各个字段中，还可以使用以下特殊字符：</h3><ul>
<li>星号（*）：代表所有可能的值，例如month字段如果是星号，则表示在满足其它字段的制约条件后每月都执行该命令操作。</li>
<li>逗号（,）：可以用逗号隔开的值指定一个列表范围，例如，“1,2,5,7,8,9”</li>
<li>中杠（-）：可以用整数之间的中杠表示一个整数范围，例如“2-6”表示“2,3,4,5,6”</li>
<li>正斜线（/）：可以用正斜线指定时间的间隔频率，例如“0-23/2”表示每两小时执行一次。同时正斜线可以和星号一起使用，例如*/10，如果用在minute字段，表示每十分钟执行一次。</li>
</ul>
<h2 id="二、crond服务"><a href="#二、crond服务" class="headerlink" title="二、crond服务"></a>二、crond服务</h2><p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;安装crontab：</p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><div class="line">1</div></pre></td><td class="code"><pre><div class="line">yum install crontabs</div></pre></td></tr></table></figure>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;服务操作说明：</p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line">5</div><div class="line">6</div><div class="line">7</div><div class="line">8</div><div class="line">9</div><div class="line">10</div><div class="line">11</div><div class="line">12</div></pre></td><td class="code"><pre><div class="line">/sbin/service crond start //启动服务</div><div class="line">/sbin/service crond stop //关闭服务</div><div class="line">/sbin/service crond restart //重启服务</div><div class="line">/sbin/service crond reload //重新载入配置</div><div class="line">查看crontab服务状态：</div><div class="line">service crond status</div><div class="line">手动启动crontab服务：</div><div class="line">service crond start</div><div class="line">查看crontab服务是否已设置为开机启动，执行命令：</div><div class="line">ntsysv</div><div class="line">加入开机自动启动：</div><div class="line">chkconfig –level 35 crond on</div></pre></td></tr></table></figure>
<h2 id="三、crontab命令详解"><a href="#三、crontab命令详解" class="headerlink" title="三、crontab命令详解"></a>三、crontab命令详解</h2><h3 id="1．命令格式"><a href="#1．命令格式" class="headerlink" title="1．命令格式"></a>1．命令格式</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div></pre></td><td class="code"><pre><div class="line">crontab [-u user] file</div><div class="line">crontab [-u user] [ -e | -l | -r ]</div></pre></td></tr></table></figure>
<h3 id="2．命令功能"><a href="#2．命令功能" class="headerlink" title="2．命令功能"></a>2．命令功能</h3><p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;通过crontab 命令，我们可以在固定的间隔时间执行指定的系统指令或 shell script脚本。时间间隔的单位可以是分钟、小时、日、月、周及以上的任意组合。这个命令非常设合周期性的日志分析或数据备份等工作。</p>
<h3 id="3．命令参数"><a href="#3．命令参数" class="headerlink" title="3．命令参数"></a>3．命令参数</h3><ul>
<li>-u user：用来设定某个用户的crontab服务，例如，“-u ixdba”表示设定ixdba用户的crontab服务，此参数一般有root用户来运行。</li>
<li>file：file是命令文件的名字,表示将file做为crontab的任务列表文件并载入crontab。如果在命令行中没有指定这个文件，crontab命令将接受标准输入（键盘）上键入的命令，并将它们载入crontab。</li>
<li>-e：编辑某个用户的crontab文件内容。如果不指定用户，则表示编辑当前用户的crontab文件。</li>
<li>-l：显示某个用户的crontab文件内容，如果不指定用户，则表示显示当前用户的crontab文件内容。</li>
<li>-r：从/var/spool/cron目录中删除某个用户的crontab文件，如果不指定用户，则默认删除当前用户的crontab文件。</li>
<li>-i：在删除用户的crontab文件时给确认提示。</li>
</ul>
<h3 id="4．常用方法"><a href="#4．常用方法" class="headerlink" title="4．常用方法"></a>4．常用方法</h3><h4 id="1-创建一个新的crontab文件"><a href="#1-创建一个新的crontab文件" class="headerlink" title="1). 创建一个新的crontab文件"></a>1). 创建一个新的crontab文件</h4><p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;在考虑向cron进程提交一个crontab文件之前，首先要做的一件事情就是设置环境变量EDITOR。cron进程根据它来确定使用哪个编辑器编辑crontab文件。9 9 %的UNIX和LINUX用户都使用vi，如果你也是这样，那么你就编辑$ HOME目录下的. profile文件，在其中加入这样一行：</p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><div class="line">1</div></pre></td><td class="code"><pre><div class="line">EDITOR=vi; <span class="built_in">export</span> EDITOR</div></pre></td></tr></table></figure>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;然后保存并退出。不妨创建一个名为<user> cron的文件，其中<user>是用户名，例如， davecron。在该文件中加入如下的内容。</user></user></p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div></pre></td><td class="code"><pre><div class="line"><span class="comment"># (put your own initials here)echo the date to the console every</span></div><div class="line"><span class="comment"># 15minutes between 6pm and 6am</span></div><div class="line">0,15,30,45 18-06 * * * /bin/<span class="built_in">echo</span> <span class="string">'date'</span> &gt; /dev/console</div></pre></td></tr></table></figure>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;保存并退出。确信前面5个域用空格分隔。</p>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;在上面的例子中，系统将每隔1 5分钟向控制台输出一次当前时间。如果系统崩溃或挂起，从最后所显示的时间就可以一眼看出系统是什么时间停止工作的。在有些系统中，用tty1来表示控制台，可以根据实际情况对上面的例子进行相应的修改。为了提交你刚刚创建的crontab文件，可以把这个新创建的文件作为cron命令的参数：</p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><div class="line">1</div></pre></td><td class="code"><pre><div class="line">$ crontab davecron</div></pre></td></tr></table></figure>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;现在该文件已经提交给cron进程，它将每隔1 5分钟运行一次。</p>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;同时，新创建文件的一个副本已经被放在/var/spool/cron目录中，文件名就是用户名(即dave)。</p>
<h4 id="2-列出crontab文件"><a href="#2-列出crontab文件" class="headerlink" title="2). 列出crontab文件"></a>2). 列出crontab文件</h4><p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;为了列出crontab文件，可以用：</p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div></pre></td><td class="code"><pre><div class="line">$ crontab -l</div><div class="line">0,15,30,45,18-06 * * * /bin/<span class="built_in">echo</span> `date` &gt; dev/tty1</div></pre></td></tr></table></figure>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;将会看到和上面类似的内容。可以使用这种方法在$ H O M E目录中对crontab文件做一备份：</p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><div class="line">1</div></pre></td><td class="code"><pre><div class="line">$ crontab -l &gt; <span class="variable">$HOME</span>/mycron</div></pre></td></tr></table></figure>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;这样，一旦不小心误删了crontab文件，可以用上一节所讲述的方法迅速恢复。</p>
<h4 id="3-编辑crontab文件"><a href="#3-编辑crontab文件" class="headerlink" title="3). 编辑crontab文件"></a>3). 编辑crontab文件</h4><p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;如果希望添加、删除或编辑crontab文件中的条目，而E D I TO R环境变量又设置为v i，那么就可以用v i来编辑crontab文件，相应的命令为：</p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><div class="line">1</div></pre></td><td class="code"><pre><div class="line">$ crontab -e</div></pre></td></tr></table></figure>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;可以像使用vi编辑其他任何文件那样修改crontab文件并退出。如果修改了某些条目或添加了新的条目，那么在保存该文件时， c r o n会对其进行必要的完整性检查。如果其中的某个域出现了超出允许范围的值，它会提示你。<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;我们在编辑crontab文件时，没准会加入新的条目。例如，加入下面的一条：</p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div></pre></td><td class="code"><pre><div class="line"><span class="comment"># DT:delete core files,at 3.30am on 1,7,14,21,26,26 days of each month</span></div><div class="line">30 3 1,7,14,21,26 * * /bin/find -name <span class="string">"core' -exec rm &#123;&#125; \;</span></div></pre></td></tr></table></figure>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;现在保存并退出。最好在crontab文件的每一个条目之上加入一条注释，这样就可以知道它的功能、运行时间，更为重要的是，知道这是哪位用户的作业。<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;现在让我们使用前面讲过的crontab -l命令列出它的全部信息：</p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line">5</div><div class="line">6</div></pre></td><td class="code"><pre><div class="line">$ crontab -l </div><div class="line"><span class="comment"># (crondave installed on Tue May 4 13:07:43 1999)</span></div><div class="line"><span class="comment"># DT:ech the date to the console every 30 minites</span></div><div class="line">0,15,30,45 18-06 * * * /bin/<span class="built_in">echo</span> `date` &gt; /dev/tty1</div><div class="line"><span class="comment"># DT:delete core files,at 3.30am on 1,7,14,21,26,26 days of each month</span></div><div class="line">30 3 1,7,14,21,26 * * /bin/find -name <span class="string">"core' -exec rm &#123;&#125; \;</span></div></pre></td></tr></table></figure>
<h4 id="4-删除crontab文件"><a href="#4-删除crontab文件" class="headerlink" title="4). 删除crontab文件"></a>4). 删除crontab文件</h4><p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;要删除crontab文件，可以用：</p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><div class="line">1</div></pre></td><td class="code"><pre><div class="line">$ crontab -r</div></pre></td></tr></table></figure>
<h4 id="5-恢复丢失的crontab文件"><a href="#5-恢复丢失的crontab文件" class="headerlink" title="5). 恢复丢失的crontab文件"></a>5). 恢复丢失的crontab文件</h4><p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;如果不小心误删了crontab文件，假设你在自己的$ H O M E目录下还有一个备份，那么可以将其拷贝到/var/spool/cron/<username>，其中<username>是用户名。如果由于权限问题无法完成拷贝，可以用：</username></username></p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><div class="line">1</div></pre></td><td class="code"><pre><div class="line">$ crontab &lt;filename&gt;</div></pre></td></tr></table></figure>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;其中，<filename>是你在$ H O M E目录中副本的文件名。<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;建议在自己的$ H O M E目录中保存一个该文件的副本。我就有过类似的经历，有数次误删了crontab文件（因为r键紧挨在e键的右边）。这就是为什么有些系统文档建议不要直接编辑crontab文件，而是编辑该文件的一个副本，然后重新提交新的文件。<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;有些crontab的变体有些怪异，所以在使用crontab命令时要格外小心。如果遗漏了任何选项，crontab可能会打开一个空文件，或者看起来像是个空文件。这时敲delete键退出，不要按<ctrl-d>，否则你将丢失crontab文件。</ctrl-d></filename></p>
<h3 id="5．使用实例"><a href="#5．使用实例" class="headerlink" title="5．使用实例"></a>5．使用实例</h3><h4 id="实例1：每1分钟执行一次command"><a href="#实例1：每1分钟执行一次command" class="headerlink" title="实例1：每1分钟执行一次command"></a>实例1：每1分钟执行一次command</h4><p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<strong>命令</strong></p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><div class="line">1</div></pre></td><td class="code"><pre><div class="line">* * * * * <span class="built_in">command</span></div></pre></td></tr></table></figure>
<h4 id="实例2：每小时的第3和第15分钟执行"><a href="#实例2：每小时的第3和第15分钟执行" class="headerlink" title="实例2：每小时的第3和第15分钟执行"></a>实例2：每小时的第3和第15分钟执行</h4><p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<strong>命令</strong></p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><div class="line">1</div></pre></td><td class="code"><pre><div class="line">3,15 * * * * <span class="built_in">command</span></div></pre></td></tr></table></figure>
<h4 id="实例3：在上午8点到11点的第3和第15分钟执行"><a href="#实例3：在上午8点到11点的第3和第15分钟执行" class="headerlink" title="实例3：在上午8点到11点的第3和第15分钟执行"></a>实例3：在上午8点到11点的第3和第15分钟执行</h4><p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<strong>命令</strong></p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><div class="line">1</div></pre></td><td class="code"><pre><div class="line">3,15 8-11 * * * <span class="built_in">command</span></div></pre></td></tr></table></figure>
<h4 id="实例4：每隔两天的上午8点到11点的第3和第15分钟执行"><a href="#实例4：每隔两天的上午8点到11点的第3和第15分钟执行" class="headerlink" title="实例4：每隔两天的上午8点到11点的第3和第15分钟执行"></a>实例4：每隔两天的上午8点到11点的第3和第15分钟执行</h4><p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<strong>命令</strong></p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line">5</div><div class="line">6</div><div class="line">7</div><div class="line">8</div><div class="line">9</div><div class="line">10</div><div class="line">11</div><div class="line">12</div><div class="line">13</div><div class="line">14</div><div class="line">15</div><div class="line">16</div><div class="line">17</div><div class="line">18</div><div class="line">19</div><div class="line">20</div><div class="line">21</div><div class="line">22</div></pre></td><td class="code"><pre><div class="line">3,15 8-11 */2 * * <span class="built_in">command</span></div><div class="line">``` </div><div class="line"></div><div class="line"><span class="comment">#### 实例5：每个星期一的上午8点到11点的第3和第15分钟执行</span></div><div class="line">&amp;<span class="comment">#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;**命令**</span></div><div class="line"></div><div class="line">```bash</div><div class="line">3,15 8-11 * * 1 <span class="built_in">command</span></div><div class="line">``` </div><div class="line"></div><div class="line"><span class="comment">#### 实例6：每晚的21:30重启smb </span></div><div class="line">&amp;<span class="comment">#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;**命令**</span></div><div class="line"></div><div class="line">```bash</div><div class="line">30 21 * * * /etc/init.d/smb restart</div><div class="line">``` </div><div class="line"></div><div class="line"><span class="comment">#### 实例7：每月1、10、22日的4 : 45重启smb </span></div><div class="line">&amp;<span class="comment">#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;**命令**</span></div><div class="line"></div><div class="line">```bash</div><div class="line">45 4 1,10,22 * * /etc/init.d/smb restart</div></pre></td></tr></table></figure>
<h4 id="实例8：每周六、周日的1-10重启smb"><a href="#实例8：每周六、周日的1-10重启smb" class="headerlink" title="实例8：每周六、周日的1 : 10重启smb"></a>实例8：每周六、周日的1 : 10重启smb</h4><p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<strong>命令</strong></p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><div class="line">1</div></pre></td><td class="code"><pre><div class="line">10 1 * * 6,0 /etc/init.d/smb restart</div></pre></td></tr></table></figure>
<h4 id="实例9：每天18-00至23-00之间每隔30分钟重启smb"><a href="#实例9：每天18-00至23-00之间每隔30分钟重启smb" class="headerlink" title="实例9：每天18 : 00至23 : 00之间每隔30分钟重启smb"></a>实例9：每天18 : 00至23 : 00之间每隔30分钟重启smb</h4><p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<strong>命令</strong></p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line">5</div><div class="line">6</div><div class="line">7</div><div class="line">8</div></pre></td><td class="code"><pre><div class="line">0,30 18-23 * * * /etc/init.d/smb restart</div><div class="line">``` </div><div class="line"></div><div class="line"><span class="comment">#### 实例10：每星期六的晚上11 : 00 pm重启smb </span></div><div class="line">&amp;<span class="comment">#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;**命令**</span></div><div class="line"></div><div class="line">```bash</div><div class="line">0 23 * * 6 /etc/init.d/smb restart</div></pre></td></tr></table></figure>
<h4 id="实例11：每一小时重启smb"><a href="#实例11：每一小时重启smb" class="headerlink" title="实例11：每一小时重启smb"></a>实例11：每一小时重启smb</h4><p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<strong>命令</strong></p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><div class="line">1</div></pre></td><td class="code"><pre><div class="line">* */1 * * * /etc/init.d/smb restart</div></pre></td></tr></table></figure>
<h4 id="实例12：晚上11点到早上7点之间，每隔一小时重启smb"><a href="#实例12：晚上11点到早上7点之间，每隔一小时重启smb" class="headerlink" title="实例12：晚上11点到早上7点之间，每隔一小时重启smb"></a>实例12：晚上11点到早上7点之间，每隔一小时重启smb</h4><p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<strong>命令</strong></p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line">5</div><div class="line">6</div><div class="line">7</div><div class="line">8</div></pre></td><td class="code"><pre><div class="line">* 23-7/1 * * * /etc/init.d/smb restart</div><div class="line">``` </div><div class="line"></div><div class="line"><span class="comment">#### 实例13：每月的4号与每周一到周三的11点重启smb </span></div><div class="line">&amp;<span class="comment">#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;**命令**</span></div><div class="line"></div><div class="line">```bash</div><div class="line">0 11 4 * mon-wed /etc/init.d/smb restart</div></pre></td></tr></table></figure>
<h4 id="实例14：一月一号的4点重启smb"><a href="#实例14：一月一号的4点重启smb" class="headerlink" title="实例14：一月一号的4点重启smb"></a>实例14：一月一号的4点重启smb</h4><p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<strong>命令</strong></p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><div class="line">1</div></pre></td><td class="code"><pre><div class="line">0 4 1 jan * /etc/init.d/smb restart</div></pre></td></tr></table></figure>
<h4 id="实例15：每小时执行-etc-cron-hourly目录内的脚本"><a href="#实例15：每小时执行-etc-cron-hourly目录内的脚本" class="headerlink" title="实例15：每小时执行/etc/cron.hourly目录内的脚本"></a>实例15：每小时执行/etc/cron.hourly目录内的脚本</h4><p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<strong>命令</strong></p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><div class="line">1</div></pre></td><td class="code"><pre><div class="line">01   *   *   *   *     root run-parts /etc/cron.hourly</div></pre></td></tr></table></figure>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<strong>说明</strong></p>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;run-parts这个参数了，如果去掉这个参数的话，后面就可以写要运行的某个脚本名，而不是目录名了</p>
<h2 id="四、使用注意事项"><a href="#四、使用注意事项" class="headerlink" title="四、使用注意事项"></a>四、使用注意事项</h2><h3 id="1-注意环境变量问题"><a href="#1-注意环境变量问题" class="headerlink" title="1. 注意环境变量问题"></a>1. 注意环境变量问题</h3><p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;有时创建了一个crontab，但是这个任务却无法自动执行，而手动执行这个任务却没有问题，这种情况一般是由于在crontab文件中没有配置环境变量引起的。</p>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;在crontab文件中定义多个调度任务时，需要特别注意的一个问题就是环境变量的设置，因为我们手动执行某个任务时，是在当前shell环境下进行的，程序当然能找到环境变量，而系统自动执行任务调度时，是不会加载任何环境变量的，因此，就需要在crontab文件中指定任务运行所需的所有环境变量，这样，系统执行任务调度时就没有问题了。</p>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;不要假定cron知道所需要的特殊环境，它其实并不知道。所以你要保证在shelll脚本中提供所有必要的路径和环境变量，除了一些自动设置的全局变量。所以注意如下3点：</p>
<ol>
<li><p>脚本中涉及文件路径时写全局路径；</p>
</li>
<li><p>脚本执行要用到java或其他环境变量时，通过source命令引入环境变量，如：</p>
</li>
</ol>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line">5</div></pre></td><td class="code"><pre><div class="line">cat start_cbp.sh</div><div class="line"><span class="meta">#!/bin/sh</span></div><div class="line"><span class="built_in">source</span> /etc/profile</div><div class="line"><span class="built_in">export</span> RUN_CONF=/home/d139/conf/platform/cbp/cbp_jboss.conf</div><div class="line">/usr/<span class="built_in">local</span>/jboss-4.0.5/bin/run.sh -c mev &amp;</div></pre></td></tr></table></figure>
<ol>
<li>当手动执行脚本OK，但是crontab死活不执行时。这时必须大胆怀疑是环境变量惹的祸，并可以尝试在crontab中直接引入环境变量解决问题。如：</li>
</ol>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><div class="line">1</div></pre></td><td class="code"><pre><div class="line">0 * * * * . /etc/profile;/bin/sh /var/www/java/audit_no_count/bin/restart_audit.sh</div></pre></td></tr></table></figure>
<h3 id="2-注意清理系统用户的邮件日志"><a href="#2-注意清理系统用户的邮件日志" class="headerlink" title="2. 注意清理系统用户的邮件日志"></a>2. 注意清理系统用户的邮件日志</h3><p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;每条任务调度执行完毕，系统都会将任务输出信息通过电子邮件的形式发送给当前系统用户，这样日积月累，日志信息会非常大，可能会影响系统的正常运行，因此，将每条任务进行重定向处理非常重要。</p>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;例如，可以在crontab文件中设置如下形式，忽略日志输出：</p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><div class="line">1</div></pre></td><td class="code"><pre><div class="line">0 */3 * * * /usr/<span class="built_in">local</span>/apache2/apachectl restart &gt;/dev/null 2&gt;&amp;1</div></pre></td></tr></table></figure>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;“/dev/null 2&gt;&amp;1”表示先将标准输出重定向到/dev/null，然后将标准错误重定向到标准输出，由于标准输出已经重定向到了/dev/null，因此标准错误也会重定向到/dev/null，这样日志输出问题就解决了。</p>
<h3 id="3-系统级任务调度与用户级任务调度"><a href="#3-系统级任务调度与用户级任务调度" class="headerlink" title="3. 系统级任务调度与用户级任务调度"></a>3. 系统级任务调度与用户级任务调度</h3><p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;系统级任务调度主要完成系统的一些维护操作，用户级任务调度主要完成用户自定义的一些任务，可以将用户级任务调度放到系统级任务调度来完成（不建议这么做），但是反过来却不行，root用户的任务调度操作可以通过“crontab –uroot –e”来设置，也可以将调度任务直接写入/etc/crontab文件，需要注意的是，如果要定义一个定时重启系统的任务，就必须将任务放到/etc/crontab文件，即使在root用户下创建一个定时重启系统的任务也是无效的。</p>
<h3 id="4-其他注意事项"><a href="#4-其他注意事项" class="headerlink" title="4. 其他注意事项"></a>4. 其他注意事项</h3><p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;新创建的cron job，不会马上执行，至少要过2分钟才执行。如果重启cron则马上执行。</p>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;当crontab突然失效时，可以尝试/etc/init.d/crond restart解决问题。或者查看日志看某个job有没有执行/报错tail -f /var/log/cron。</p>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;千万别乱运行crontab -r。它从Crontab目录（/var/spool/cron）中删除用户的Crontab文件。删除了该用户的所有crontab都没了。</p>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;在crontab中%是有特殊含义的，表示换行的意思。如果要用的话必须进行转义\%，如经常用的date ‘+%Y%m%d’在crontab里是不会执行的，应该换成date ‘+\%Y\%m\%d’。</p>

	

	
		<span class="different-posts"><a href="/2017/10/12/2. Linux 命令/52. Linux 命令- crontab/" onclick="window.history.go(-1); return false;">⬅️ Go back </a></span>

	

</article>

	</main>

	<footer class="footer">
	<div class="footer-content">
		
	      <div class="footer__element">
	<p>Hi there, <br />welcome to my Blog glad you found it. Have a look around, will you?</p>
</div>

	    
	      <div class="footer__element">
	<h5>Check out</h5>
	<ul class="footer-links">
		<li class="footer-links__link"><a href="/archives">Archive</a></li>
		
		  <li class="footer-links__link"><a href="/atom.xml">RSS</a></li>
	    
		<li class="footer-links__link"><a href="/about">about page</a></li>
		<li class="footer-links__link"><a href="/tags">Tags</a></li>
		<li class="footer-links__link"><a href="/categories">Categories</a></li>
	</ul>
</div>

	    

		<div class="footer-credit">
			<span>© 2017 失落的乐章 | Powered by <a href="https://hexo.io/">Hexo</a> | Theme <a href="https://github.com/HoverBaum/meilidu-hexo">MeiliDu</a></span>
		</div>

	</div>


</footer>



</body>

</html>
